// 泛型就是在函数调用时确定类型
// 而类型注释是在函数定义时确定类型

// 泛型用一对尖括号包裹
function join<JSPang>(first: JSPang, second: JSPang) {
    return `${first}${second}`
}

const result = join<number>(1, 2)
console.log(result);

// 泛型一般用字母 T 表示
// T[] 也可以写成 Array<T>，表示由 T 类型构成的数组
function myFun<T>(params: T[]) {
    return params.join(',')
}

const result2 = myFun<string>(['aaa', 'bbb']);
console.log(result2);

// 泛型可以定义多个类型
function join2<T, P>(first: T, second: P) {
    return `${first}${second}`
}
join2<string,number>("1", 2)
